package com.dartfar.base.dao;

import java.util.Collection;
import java.util.List;

import org.hibernate.type.Type;

import com.dartfar.base.model.Person;
import com.dartfar.organize.model.Department;


public interface DaoUtil<T> {
	
	/**
	 * 保存
	 * @param t 对象
	 * @return 对象ID
	 */
	public int save(T t);

	
	/**
	 * 获取对象
	 * @param id ID
	 * @return 对象
	 */
	public T get(int id,Class<T> classT);

	/**
	 * 根据HQL获取对象
	 * @param HQL
	 * @return 对象
	 */
	public Object get(String hql);
	
	/**
	 * 删除对象
	 * @param t 对象
	 */
	public void delete(T t);

	/**
	 * 修改对象
	 * @param t 对象
	 */
	public void update(T t);
	
	/**
	 * 更新 hql
	 * @param hql
	 */
	public void execute(String hql);
	

	/**
	 * 获取对象列表
	 * @param hql 语句
	 * @param objects 参数值
	 * @param types 参数类型
	 * @return
	 */
	public List<T> getList(String hql,Object[] objects,Type[] types);
	
	/**
	 * 获取对象列表
	 * @param hql 语句
	 * @return
	 */
	public List<T> getList(String hql);
	
	/**
	 * 根据获取对象列表
	 * @param hql
	 * @param code
	 * @param person
	 * @param depart
	 * @return
	 */
	public List<T> getListByAut(String hql, String code, Person person, Department depart);
	
	/**
	 * 获取数量
	 * @param hql 语句
	 * @param objects 参数值
	 * @param types 参数类型
	 * @return 列表
	 */
	public long getCount(String hql,Object[] objects,Type[] types);
	
	/**
	 * 获取数量
	 * @param hql 语句
	 * @return 列表
	 */
	public Long getCount(String hql);
	
	/**
	 * 根据权限获取数量
	 * @param hql
	 * @param code
	 * @param person
	 * @param depart
	 * @return
	 */
	public long getCountByAut(String hql, String code, Person person, Department depart);
	
	/**
	 * 获取翻页列表
	 * @param hql 语句
	 * @param objects 参数
	 * @param types 参数类型
	 * @param offset 起始数
	 * @param length 长度
	 * @return
	 */
	public List<T> getListForPage(final String hql,Object[] objects,Type[] types, final int pageNo, final int pageSize);
	
	/**
	 * 获取翻页列表
	 * @param hql 语句
	 * @param offset 起始数
	 * @param length 长度
	 * @return 翻页列表
	 */
	public List<T> getListForPage(final String hql, final int pageNo, final int pageSize);
	
	/**
	 * 根据权限获取翻页列表
	 * @param hql 语句
	 * @param offset 起始数
	 * @param length 长度
	 * @return 翻页列表
	 */
	public List<T> getListForPageByAut(String hql, String code, Person person, Department depart, final int pageNo, final int pageSize);
	
	/**
	 * 批量操作
	 * @param entities
	 */
	public void deleteAll(Collection<T> entities);



}
